package com.qkst.website.common.utils;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @description : 字符串常用工具类,方便快速开发使用
 * @Author : lihao
 * @Verion : 1.0v
 * @Email : ahlxlihao@163.com
 * @date 2017-04-26
 */
public class StringUtils {
	
	private static final Logger log = LoggerFactory.getLogger(StringUtils.class);//定义log
	
	/**
	 * null转为空,否则toString返回
	 * @param Object obj
 	 * @return String
	 */
	public static String null2String(Object obj) {
		if (obj == null) {
			return "";
		}
		return obj.toString();
	}

	/**
	 * 判断字符是否为  null || ""
	 * @param String str
	 * @return boolean
	 */
	public static boolean isBlank(String str) {
		if (str == null || "".equals(str.trim())) {
			return true;
		}
		return false;
	}

	/**
	 * 随机数 int
	 * @param min 最小值
	 * @param max 最大值
	 * @return int
	 */
	public static int randomInt(int min, int max) {
		Random random = new Random();
		int s = random.nextInt(max) % (max - min + 1) + min;
		return s;
	}

	/**
	 * 随机数 long
	 * @param min long
	 * @param max long
	 * @return long
	 */
	public static long randomLong(long min, long max) {
		Random random = new Random();
		Long s = random.nextLong() % (max - min + 1) + min;
		return Math.abs(s);
	}

	/**
	 * 随机时间 Date
	 * @param date Date
	 * @return Date
	 */
	public static Date randomDate(Date date) {
		long times = date.getTime();
		long t2015 = 1420041600000L;
		long max = times - t2015;
		long rand = randomLong(0, max);
		return new Date(times - rand);
	}

	/**
	 * 随机从时间段中随机出时间
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @return Date
	 */
	public static Date randomDate(Date startDate, Date endDate) {
		long times = startDate.getTime();
		long min = endDate.getTime();
		long max = times - min;
		long rand = randomLong(0, max);
		return new Date(times - rand);
	}
	
	
	/**
	 * String转为int
	 * @param str
	 * @return int
	 */
	public static int stringToInt(String str){
		try {
			return Integer.parseInt(str);
		} catch (Exception e) {
			e.printStackTrace();
			return 0;
		}
	}
	
	/**
	 * 格式化时间Date转为String
	 * @param date 时间
	 * @param reg 表达式例如:yyyy-MM-dd HH:mm:ss
	 * @return String
	 */
	public static String getStrDate(Date date,String reg){
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return dateFormat.format(date);
	}
	
	/**
	 * String转为long
	 * @param str String 
	 * @return long
	 */
	public static long stringToLong(String str){
		try {
			return Long.parseLong(str);
		} catch (Exception e) {
			return 0;
		}
	}
	
	/**
	 * String转为double
	 * @param str String
	 * @return double
	 */
	public static double stringToDouble(String str){
		try{
			return Double.parseDouble(str);
		}catch(Exception e){
			e.printStackTrace();
			return 0;
		}
	}
	
	/**
	 * String转为float
	 * @param str String
	 * @return float
	 */
	public static float stringToFloat(String str){
		try{
			return Float.parseFloat(str);
		}catch(Exception e){
			e.printStackTrace();
			return 0;
		}
	}
	
	/**
	 * 取String的首字母
	 * @param str String
	 * @return char
	 */
	public static char stringToChar(String str){
		try {
			return str.charAt(0);
		} catch (Exception e) {
			e.printStackTrace();
			return 0;
		}
	}
	  /**
     * 提供精确的小数位四舍五入处理。
     * @param number 需要四舍五入的数字
     * @param scale 小数点后保留位数  scale>=0
     * @return double 四舍五入后的结果
     */
    public static double round(double number,int scale){
        if(scale<0){
        	log.error("The scale must be a positive integer or zero");
            throw new IllegalArgumentException(
                "The scale must be a positive integer or zero");
        }
        BigDecimal b = new BigDecimal(Double.toString(number));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
 
    public static double nextDouble(final double min, final double max) throws Exception {
        if (max < min) {
           return 0;
        }
        if (min == max) {
            return min;
        }
        return min + ((max - min) * new Random().nextDouble());
    }

}
